/**
 * 函数单例
 *
 * 该函数通过封装原有函数，确保原有函数只能成功调用一次
 * 如果尝试多次调用，第一次调用之后的调用会被拒绝，并返回指定的消息
 *
 * @param {Function} func - 封装的原始函数
 * @param {string} [message='function is single'] - 多次调用时返回的提示消息，默认为'function is single'
 * @returns {Function} - 返回一个封装后的函数
 */
export default function singleFunction(func, message = 'Function is called only once') {
  let hasBeenCalled = false;

  return function (...args) {
    if (hasBeenCalled) {
      return Promise.reject(message);
    }
    hasBeenCalled = true;
    return func.apply(this, args);
  };
}
